#pragma once

#include "Globals.h"

namespace game_engine { namespace components
{

// Forward declaration
class Behaviour;

/*!
 * \class State
 * \brief 
 */
class State
{
///////////////////////////////////////////////////////////////////////////////
// Attribute definition
///////////////////////////////////////////////////////////////////////////////
protected:
    Behaviour *fsm;
    State *nextState;

///////////////////////////////////////////////////////////////////////////////
// Method definition
///////////////////////////////////////////////////////////////////////////////
public:
    // Constructors and Destructors
    State(void);
    State(Behaviour *parent);
    virtual ~State(void) = 0;

    // Others
    virtual void onEnter(void) throw(...);
    virtual void onLoop(const FLOAT32 time) throw(...);
    virtual void onExit(void) throw(...);

    // Getters
    State* getNextState(void) const;

    // Setters


};

}}
